#pragma once

#include <vector>
#include <sys/epoll.h>
#include <unistd.h>

class Channel; // 前置声明，避免包含完整定义

class Poller {
public:
    explicit Poller(int maxEvents = 1024);
    ~Poller();

    // 禁止拷贝
    Poller(const Poller&) = delete;
    Poller& operator=(const Poller&) = delete;

    // 主动调用，等待事件发生
    // timeoutMs: 超时毫秒数，-1表示无限等待
    int poll(int timeoutMs, std::vector<Channel*>& activeChannels);

    // 注册新的Channel，监听事件
    bool addChannel(Channel* channel);

    // 修改已注册Channel的监听事件
    bool updateChannel(Channel* channel);

    // 删除Channel
    bool removeChannel(Channel* channel);

private:
    int epollFd_;
    std::vector<epoll_event> events_;
};
